// proxy 优势：
// 1. Object.defineProperty()只能监听属性的读写，proxy能够监视到更多对象操作
// 比如：delete、或者方法的调用

// const person = {
//     name: "xxx",
//     age: 20
// }

// const personProperty = new Proxy(person, {
//     deleteProperty(target, property) {
//         delete target[property]
//     }
// })

// delete personProperty.age
// console.log(person);

// 2. 利用Proxy 对数组进行监听

// const arr = []
// const myProxy = new Proxy(arr, {
//     set(target, property, value) {
//         target[property] = value
//         return true  
//     }
// })

// myProxy.push(100)
// console.log(arr);

// 3. Proxy 是以非侵入的方式监管了对象的读写
// Proxy不需要对对象本身进行读写，Object.deineProperty需要用特定的方式对对象进行单独的读写
const person = {}
    // name/age需要单独定义监听对象属性的值
Object.defineProperty(person, 'name', {
    get() {
        return person._name
    },
    set(value) {
        person._name = value
    },
})
Object.defineProperty(person, 'age', {
    get() {
        return person._age
    },
    set(value) {
        person._age = value
    },
})



person.name = 'xxx'
person.age = 20
console.log(person); //{ _name: 'xxx', _age: 20 }
console.log(person.name); //xxx
console.log(person.age); //20